#include<bits/stdc++.h> 
using namespace std;
//	一个电子图书馆存了数以万计的书本，根据标题、作者、摘要关键词、出版商和出版年份进行存
//	储。每一本书都由7位数字组成独一无二的ID。现在给定读者给来的任意查询，需要输出查询结果
//	并且根据ID进行升序排序
//1.每个输入都包含一个测试用例，对于每一个测试用例，第一行包含一个正整数N<10000，表示书本
//	的总数。
//2.然后紧跟着N块，每一块都包含了书本的信息，每一块有6行：
//	(1)书本的7位数字ID号
//	(2)书本的标题，不超过80个字符的字符串
//	(3)书本的作者，不超过80个字符的字符串，每一本书只有一个作者 
//	(4)关键词，每个词语是一个不超过10个字符的不包含空格的字符串，每本书不超过5个。总共不
//		超过1000个不同的关键词 
//	(5)书本的出版社，不超过80个字符的字符串，总共不超过1000个不同的出版社 
//	(6)书本的出版年份，一个4位数字组成的[1000,3000]间的数字 
//3.之后在一行里包含一个正整数M≤1000，表示用户搜索的数量。然后M行每一行由如下格式表示：
//	(1)  1: 书本的标题
//	(2)	 2: 书本的作者 
//	(3)  3: 一个关键词 
//	(4)	 4: 出版社 
//	(5)  5: 出版年份
//4.对于每一个查询，首先在一行中输出查询的条件，然后逐行输出搜索到的记录。如果没有记录，
//	则输出Not Found
//5.map，set，行读入 
map<string,set<string>> title_map;	//书名与ID的映射，因为考虑到同名书籍的存在，所以用set，直接做完了去重排序 
map<string,set<string>> author_map;	//作者与ID的映射 
map<string,set<string>> keyword_map;	//关键字和ID的映射 
map<string,set<string>> publisher_map;	//出版社和ID的映射 
map<string,set<string>> year_map;	//年份的ID的映射 
void keyword_deal(string s, string ID){	//因为关键词一行读入，所以需要自己写个函数把一行输入变成空格隔开的关键词集合 
	int start = 0;
	for(unsigned int i = 0;i<s.length();i++){
		if(s[i]==' '){
			string tmp = s.substr(start,i-start);
			if(keyword_map[tmp].size()==0) keyword_map[tmp] = {ID};
			else keyword_map[tmp].insert(ID);
			start = i+1;
		}
	}
	string tmp = s.substr(start);
	if(keyword_map[tmp].size()==0) keyword_map[tmp] = {ID};
	else keyword_map[tmp].insert(ID);
} 
int main(){
	string N;
	int n;
	getline(cin, N);	//用getline行读入 
	n = stoi(N);
	for(int i = 0;i<n;i++){
		string ID, title, author, publisher, keywords, year;
		getline(cin, ID);
		getline(cin, title);
		getline(cin, author);
		getline(cin, keywords);
		getline(cin, publisher);
		getline(cin, year);
		if(title_map[title].size()==0) title_map[title] = {ID};
		else title_map[title].insert(ID);
		if(author_map[author].size()==0) author_map[author] = {ID};
		else author_map[author].insert(ID);
		if(publisher_map[publisher].size()==0) publisher_map[publisher] = {ID};
		else publisher_map[publisher].insert(ID);
		if(year_map[year].size()==0) year_map[year] = {ID};
		else year_map[year].insert(ID);
		keyword_deal(keywords, ID);
	}
	string M;
	int m;
	getline(cin, M);
	m = stoi(M);
	for(int i = 0;i<m;i++){
		string query_;
		getline(cin, query_);
		cout<<query_<<endl;
		int type = stoi(query_.substr(0,1));
		switch(type){
			case 1:{
				string title = query_.substr(3);
				map<string, set<string>>::iterator it = title_map.find(title);
				if(it!=title_map.end())
				{
					set<string>::iterator itt;
					for(itt=it->second.begin();itt!=it->second.end();itt++)
					{
						cout<<(*itt)<<endl;
					}
				 }
				else cout<<"Not Found"<<endl;
				break;
			}
			case 2:{
				string author = query_.substr(3);
				map<string, set<string>>::iterator it = author_map.find(author);
				if(it!=author_map.end())
				{
					set<string>::iterator itt;
					for(itt=it->second.begin();itt!=it->second.end();itt++)
					{
						cout<<(*itt)<<endl;
					}
				 }
				else cout<<"Not Found"<<endl;
				break;
			}
			case 3:{
				string keyword = query_.substr(3);
				map<string, set<string>>::iterator it = keyword_map.find(keyword);
				if(it!=keyword_map.end())
				{
					set<string>::iterator itt;
					for(itt=it->second.begin();itt!=it->second.end();itt++)
					{
						cout<<(*itt)<<endl;
					}
				 }
				else cout<<"Not Found"<<endl;
				break;
			}
			case 4:{
				string publisher = query_.substr(3);
				map<string, set<string>>::iterator it = publisher_map.find(publisher);
				if(it!=publisher_map.end())
				{
					set<string>::iterator itt;
					for(itt=it->second.begin();itt!=it->second.end();itt++)
					{
						cout<<(*itt)<<endl;
					}
				 }
				else cout<<"Not Found"<<endl;
				break;
			}
			case 5:{
				string year = query_.substr(3);
				map<string, set<string>>::iterator it = year_map.find(year);
				if(it!=year_map.end())
				{
					set<string>::iterator itt;
					for(itt=it->second.begin();itt!=it->second.end();itt++)
					{
						cout<<(*itt)<<endl;
					}
				 }
				else cout<<"Not Found"<<endl;
				break;
			}
		}
	}
	return 0;
	
}